package demo1;

import java.util.Arrays;

public class MyStack {
      //问题1 ：底层用数组实现，还是链表实现
      static   int  DEFAULT_SIZE  = 10;
    private   int [] element ;
    int usedsize = 0 ;  //元素的个数

    //栈的几个方法：
    // 1 构造一个空的栈
    public MyStack(){
        this.element = new int[10];
    }
    // 2 压栈
  public void push(int data){
        //先判断栈是否有空间
        if(usedsize==element.length){
            //如果没有空间
            //则扩容
            this.element = Arrays.copyOf(element,2*element.length);
        }
        //保证空间后
       this.element[usedsize++] = data;
  }
    //2. 出栈并获取出栈的元素值
    public int pop(){
        //要判断栈是否为空，如果为空，则退出
      try{
          if (isEmpty()) {
              //2. 问题出现,构造参数的形参问题，super()调用父类的构造方法
              throw new EmptyException("EmptyException异常报错");
          }
      }catch (EmptyException e){
              e.printStackTrace();
      }
        int val =   this.element[usedsize-1];
        usedsize -- ;
        return val;
    }
    //3. 获取栈顶元素
    public int  peek(){
        try{
            if (isEmpty()) {
                //2. 问题出现,构造参数的形参问题，super()调用父类的构造方法
                throw new EmptyException("EmptyException异常报错");
            }
        }catch (EmptyException e){
            e.printStackTrace();
        }
        return    this.element[usedsize-1];
    }
    //4. 判断栈是否为空
    public boolean isEmpty(){
        return usedsize == 0;
    }
    //5. 获取栈中有效元素的个数
    public int size(){
        return usedsize;
    }
}
